package ar.com.cubika.trainees.date;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Utilitarios para manejo de fechas
 */
public class DateUtils {

    /**
     * El anio en el que estamos
     */
    public static long getAnioActual() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * El dia en el que estamos
     */
    public static Date getHoy() {
        return calendarHoy().getTime();
    }

    /**
     * El primer dia del mes en el que estamos
     */
    public static Date principioDeMes() {
        Calendar result = calendarHoy();
        result.set(Calendar.DAY_OF_MONTH, 1);
        return result.getTime();
    }
    
    public static Date createDate(long dia, long mes, long anio) {
        Calendar calendar = calendarHoy();
        calendar.set(Calendar.YEAR, (int)anio);
        calendar.set(Calendar.MONTH, (int)mes);
        calendar.set(Calendar.DAY_OF_MONTH, (int)dia);
        return calendar.getTime();
    }

    /**
     * True si la fecha esta en el pasado
     */
    public static boolean isPasado(Date fecha) {
        return fecha.before(getHoy());
    }

    /**
     * Suma una cantidad de dias a una fecha y devuelve el resultado.
     * @param fecha la fecha a partir para la cuenta
     * @param dias la cantidad de dias a sumar, puede ser negativa
     */
    public static Date addDays(Date fecha, long dias) {
        Calendar result = calendarHoy();
        result.setTime(fecha);
        result.add(Calendar.DAY_OF_MONTH, (int)dias);
        return result.getTime();
    }

    private static Calendar calendarHoy() {
        Calendar hoy = Calendar.getInstance();
        Calendar nuevaFecha = Calendar.getInstance();
        nuevaFecha.clear();
        nuevaFecha.set(Calendar.DAY_OF_MONTH, hoy.get(Calendar.DAY_OF_MONTH));
        nuevaFecha.set(Calendar.MONTH, hoy.get(Calendar.MONTH));
        nuevaFecha.set(Calendar.YEAR, hoy.get(Calendar.YEAR));
        return nuevaFecha;
    }

	public static String formatDate(Date fecha) {
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		return format.format(fecha);
	}

}
